#!/bin/bash

echo "=== 编译 libmpitimer.so - 自动MPI性能分析库 ==="
echo ""

# 编译动态库
echo "Step 1: 编译共享库..."
mpicxx -shared -fPIC -O2 -o libmpitimer.so libmpitimer.cpp -ldl

if [ $? -ne 0 ]; then
    echo "编译失败！"
    exit 1
fi

echo "编译成功: libmpitimer.so"
echo ""

# 显示库信息
echo "Step 2: 检查库..."
file libmpitimer.so
echo ""

# 检查符号
echo "Step 3: 检查MPI拦截函数（部分）..."
nm libmpitimer.so | grep -E "MPI_Init|MPI_Finalize|MPI_Barrier|MPI_Allreduce" | head -10
echo ""

echo "=== 编译完成 ==="
echo ""
echo "性能优化说明："
echo "  - 默认模式：只统计MPI调用（性能影响 <5%）"
echo "  - 追踪模式：追踪代码位置（性能影响 ~20%）"
echo ""
echo "使用方法："
echo ""
echo "  【模式1: 基础统计（推荐，性能影响小）】"
echo "     export LD_PRELOAD=\$PWD/libmpitimer.so"
echo "     mpirun -np 288 ./yourSolver"
echo "     → 输出：表1(时间统计) + 表2(数据传输)"
echo ""
echo "  【模式2: 完整追踪（性能开销大，用于详细分析）】"
echo "     export LD_PRELOAD=\$PWD/libmpitimer.so"
echo "     export MPITIMER_ENABLE_BACKTRACE=1"
echo "     mpirun -np 288 ./yourSolver"
echo "     → 输出：表1 + 表2 + 表3(代码位置热点)"
echo ""
echo "  【模式3: 采样追踪（平衡性能和信息量）】"
echo "     export LD_PRELOAD=\$PWD/libmpitimer.so"
echo "     export MPITIMER_ENABLE_BACKTRACE=1"
echo "     export MPITIMER_SAMPLE_RATE=100    # 每100次采样1次"
echo "     mpirun -np 288 ./yourSolver"
echo "     → 输出：表1 + 表2 + 表3(采样数据)"
echo ""
echo "环境变量："
echo "  MPITIMER_ENABLE_BACKTRACE=1  : 开启代码位置追踪"
echo "  MPITIMER_SAMPLE_RATE=N       : 采样率，N越大开销越小"
echo ""
echo "建议："
echo "  - 日常分析：使用模式1（默认）"
echo "  - 寻找热点：使用模式3，采样率设为50-100"
echo "  - 详细调试：使用模式2（较慢）"

